package br.com.tcf.dao;

import java.util.List;

import br.com.tcf.Conexao.Connection;
import br.com.tcf.Conexao.DaoResource;
import br.com.tcf.entidades.Empresa;
import br.com.tcf.login.Grupo;
import br.com.tcf.login.Permissao;

public class GrupoDao extends DaoResource{
	private static Connection connection = new Connection();
//	private buildLog bl;
	private List<Grupo> lgrupo;
	private List<Permissao> lgpermissao;

	public void salvarGrupo(Grupo grupo){
		super.saveOrUpdate(connection, grupo);		
	}

	public void mergeGrupo(Grupo grupo){
		super.merge(connection, grupo);		
	}

	@SuppressWarnings("unchecked")
	public List<Grupo> listarGrupo(){
		lgrupo = super.select(connection, "FROM Grupo");
		return lgrupo;
	}

	@SuppressWarnings("unchecked")
	public List<Grupo> listarGrupoToEager(){
		lgrupo = super.select(connection, "SELECT DISTINCT g FROM Grupo g LEFT JOIN FETCH g.permissoes WHERE g.empresa = null");
		return lgrupo;
	}
	
	@SuppressWarnings("unchecked")
	public List<Grupo> listarGrupoNotEmpresa(){
		lgrupo = super.select(connection, "FROM Grupo g WHERE g.empresa = null");
		return lgrupo;
	}

	@SuppressWarnings("unchecked")
	public List<Grupo> listarGrupoNotEmpresaToEager(){
		lgrupo = super.select(connection, "SELECT DISTINCT g FROM Grupo g LEFT JOIN FETCH g.permissoes WHERE g.empresa = null");
		return lgrupo;
	}

	@SuppressWarnings("unchecked")
	public List<Grupo> listarGrupoPorEmpresa(Empresa empresa){
		lgrupo = super.select(connection, "SELECT g FROM Grupo g where g.empresa = :empresa OR g.sn_publico = true", "empresa", empresa);
		return lgrupo;
	}

	@SuppressWarnings("unchecked")
	public List<Grupo> listarGrupoPorEmpresaToEager(Empresa empresa){
		lgrupo = super.select(connection, "SELECT DISTINCT g FROM Grupo g LEFT JOIN FETCH g.permissoes"
				                        + " WHERE g.empresa = :empresa", "empresa", empresa);
		return lgrupo;
	}

	@SuppressWarnings("unchecked")
	public List<Permissao> listarPermissoes(){
		lgpermissao = super.select(connection, "FROM Permissao");
		return lgpermissao;
	}

	@SuppressWarnings("unchecked")
	public Grupo buscarGrupoPorId(Integer id){
		lgrupo = super.select(connection, "FROM Grupo WHERE id_grupo = :id", "id", id);

		if(lgrupo.size() == 0){
			return null;
		}else{
			return lgrupo.get(0);
		}
	}

	public void  salvarPermissao(Permissao permissao){
		super.saveOrUpdate(connection, permissao);
	}

	public void excluiPermissao(Permissao permissao){
		super.delete(connection, permissao);
	}
}
